/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.nys.conci.citas.bean;

import com.nys.conci.backend.entidad.Identidad;
import com.nys.conci.base.BeanBase;
import com.nys.conci.base.excepcion.ExcepcionManager;
import com.nys.conci.base.utilitario.FechaUtil;
import com.nys.conci.base.utilitario.MensajeUtil;
import com.nys.conci.citas.entidad.ControlCita;
import com.nys.conci.citas.entidad.EstadoCita;
import com.nys.conci.citas.modelo.ModeloCitas;
import com.nys.conci.citas.servicio.ServicioControlCitas;
import com.nys.conci.cliente.entidad.Persona;
import com.nys.conci.usuario.servicio.ServicioAdministracion;
import com.nys.conci.usuario.servicio.ServicioControlUsuario;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.inject.Inject;

/**
 *
 * @author Yeudy10
 */
@ManagedBean
@ViewScoped
public class BeanCitasUsuario extends BeanBase {

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<     VARIABLES     >>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    @Inject
    private ServicioControlUsuario scu;
    @Inject
    private ServicioControlCitas scc;
    @Inject
    private ServicioAdministracion sa;
    @Inject
    private Identidad identidad;
    private List<ModeloCitas> listado_modelo_citas;
    private List<Persona> listado_persona_usuario;
    private Persona persona_usuario_tabla;
    private Persona persona_usuario_select;
    private ModeloCitas modelo_citas_tabla;
    private ModeloCitas modelo_citas_select;
    private List<EstadoCita> listado_estado;
    private ControlCita cita;
    private String identificacion_u;
    private String dsc_usuario;
    private boolean modificar;
    private boolean habilitar;
    private boolean ocultar;
    private boolean sonar;

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<  INICIALIZARORES  >>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    /**
     * Constructor
     */
    public BeanCitasUsuario() {
        this.inicializar();
    }

    /**
     * Inicializa las variables del bean, al acceder al constructor
     */
    private void inicializar() {
        try {
            ocultar = false;
            habilitar = false;
            sonar = false;
            modelo_citas_select = new ModeloCitas();
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    /**
     * Inicializas las variables y atributos del bean, despues del llamado del
     * constructor. Es utilizado para las inicializaciones que utilicen datos de
     * objetos injectados.
     */
    @Override
    @PostConstruct
    public void inicializarPost() {
        identificacion_u = identidad.getIdentificacion();
        dsc_usuario = identidad.getNombre();
        cargarCitas();
        cargarUsuarios();
        cargarEstados();
    }

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<      MÉTODOS      >>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    public void cargarUsuarios() {
        try {
            listado_persona_usuario = new ArrayList<Persona>();
            listado_persona_usuario = scu.consultarPersonas("U");
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }
    
        public void cargarEstados() {
        try {
            setListado_estado(new ArrayList<EstadoCita>());
            setListado_estado(sa.consultarListaEstadoCita());
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    public void cargarCitas() {
        try {
            listado_modelo_citas = new ArrayList<ModeloCitas>();
            List<ControlCita> lista = new ArrayList<ControlCita>();
            lista = scc.consultarListaCitasUsuario(identificacion_u);
            for (ControlCita controlCita : lista) {
                ModeloCitas modelo = new ModeloCitas();
                modelo.setDscEstado(sa.consultarEstadoCita(controlCita.getId_estado_cita()).getNombre());
                modelo.setDscEspecialidad(sa.consultarEspecialidad(controlCita.getId_especialidad()).getNombre());
                modelo.setId_especialidad(controlCita.getId_especialidad());
                modelo.setFechareal(controlCita.getFechareal());
                modelo.setHora(controlCita.getHora());
                modelo.setId_estado_cita(controlCita.getId_estado_cita());
                modelo.setId_plan_cliente(controlCita.getId_plan_cliente());
                modelo.setIdentificacion_c(controlCita.getIdentificacion_c());
                modelo.setIdentificacion_u(controlCita.getIdentificacion_u());
                modelo.setId_cita(controlCita.getId_cita());
                modelo.setEstado_pago(controlCita.getEstado_pago());
                modelo.setDiagnostico(controlCita.getDiagnostico());
                Persona per_c = scu.consultarPersona(controlCita.getIdentificacion_c());
                if (per_c != null) {
                    modelo.setNombre_cliente(per_c.getNombre() + " " + per_c.getApellido1() + " " + per_c.getApellido2());
                }
                Persona per_u = scu.consultarPersona(controlCita.getIdentificacion_u());
                if (per_u != null) {
                    modelo.setNombre_usuario(per_u.getNombre() + " " + per_u.getApellido1() + " " + per_u.getApellido2());
                }               

                listado_modelo_citas.add(modelo);
            }
            
             if (sonar) {
                    sonar= false;
                } else {
                    sonar=true;
                }
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    public void guardarCita() {
        try {            
            scc.guardarCita(modelo_citas_select.toControlCitas(), true);
            cargarCitas();            
            modelo_citas_select= new ModeloCitas();
            modelo_citas_tabla= new ModeloCitas();

        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    public void limpiarCita() {
        try {
            modificar = false;
            habilitar = false;
            ocultar = false;
            identificacion_u = identidad.getIdentificacion();
            dsc_usuario = null;
            modelo_citas_select = new ModeloCitas();
            modelo_citas_tabla = new ModeloCitas();
            persona_usuario_select = new Persona();
            persona_usuario_tabla = new Persona();
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    public void seleccionarUsuario() {
        try {
            persona_usuario_select = persona_usuario_tabla;
            identificacion_u = persona_usuario_select.getIdentificacion();
            dsc_usuario = persona_usuario_select.getNombre() + " " + persona_usuario_select.getApellido1() + " " + persona_usuario_select.getApellido2();
            persona_usuario_select = null;
            persona_usuario_tabla = null;
            cargarCitas();
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    public void seleccionarCita() {
        try {
            modelo_citas_select = modelo_citas_tabla;
            modificar = true;
            modelo_citas_tabla= null;
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }
    

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<      GET & SET      >>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    /**
     * @return the listado_modelo_citas
     */
    public List<ModeloCitas> getListado_modelo_citas() {
        return listado_modelo_citas;
    }

    /**
     * @param listado_modelo_citas the listado_modelo_citas to set
     */
    public void setListado_modelo_citas(List<ModeloCitas> listado_modelo_citas) {
        this.listado_modelo_citas = listado_modelo_citas;
    }

    /**
     * @return the listado_persona_usuario
     */
    public List<Persona> getListado_persona_usuario() {
        return listado_persona_usuario;
    }

    /**
     * @param listado_persona_usuario the listado_persona_usuario to set
     */
    public void setListado_persona_usuario(List<Persona> listado_persona_usuario) {
        this.listado_persona_usuario = listado_persona_usuario;
    }

    /**
     * @return the modelo_citas_tabla
     */
    public ModeloCitas getModelo_citas_tabla() {
        return modelo_citas_tabla;
    }

    /**
     * @param modelo_citas_tabla the modelo_citas_tabla to set
     */
    public void setModelo_citas_tabla(ModeloCitas modelo_citas_tabla) {
        this.modelo_citas_tabla = modelo_citas_tabla;
    }

    /**
     * @return the modelo_citas_select
     */
    public ModeloCitas getModelo_citas_select() {
        return modelo_citas_select;
    }

    /**
     * @param modelo_citas_select the modelo_citas_select to set
     */
    public void setModelo_citas_select(ModeloCitas modelo_citas_select) {
        this.modelo_citas_select = modelo_citas_select;
    }

    /**
     * @return the cita
     */
    public ControlCita getCita() {
        return cita;
    }

    /**
     * @param cita the cita to set
     */
    public void setCita(ControlCita cita) {
        this.cita = cita;
    }

    /**
     * @return the identificacion_u
     */
    public String getIdentificacion_u() {
        return identificacion_u;
    }

    /**
     * @param identificacion_u the identificacion_u to set
     */
    public void setIdentificacion_u(String identificacion_u) {
        this.identificacion_u = identificacion_u;
    }

    /**
     * @return the dsc_usuario
     */
    public String getDsc_usuario() {
        return dsc_usuario;
    }

    /**
     * @param dsc_usuario the dsc_usuario to set
     */
    public void setDsc_usuario(String dsc_usuario) {
        this.dsc_usuario = dsc_usuario;
    }

    /**
     * @return the modificar
     */
    public boolean isModificar() {
        return modificar;
    }

    /**
     * @param modificar the modificar to set
     */
    public void setModificar(boolean modificar) {
        this.modificar = modificar;
    }

    /**
     * @return the habilitar
     */
    public boolean isHabilitar() {
        return habilitar;
    }

    /**
     * @param habilitar the habilitar to set
     */
    public void setHabilitar(boolean habilitar) {
        this.habilitar = habilitar;
    }

    /**
     * @return the persona_usuario_tabla
     */
    public Persona getPersona_usuario_tabla() {
        return persona_usuario_tabla;
    }

    /**
     * @param persona_usuario_tabla the persona_usuario_tabla to set
     */
    public void setPersona_usuario_tabla(Persona persona_usuario_tabla) {
        this.persona_usuario_tabla = persona_usuario_tabla;
    }

    /**
     * @return the persona_usuario_select
     */
    public Persona getPersona_usuario_select() {
        return persona_usuario_select;
    }

    /**
     * @param persona_usuario_select the persona_usuario_select to set
     */
    public void setPersona_usuario_select(Persona persona_usuario_select) {
        this.persona_usuario_select = persona_usuario_select;
    }

    /**
     * @return the ocultar
     */
    public boolean isOcultar() {
        return ocultar;
    }

    /**
     * @param ocultar the ocultar to set
     */
    public void setOcultar(boolean ocultar) {
        this.ocultar = ocultar;
    }

    /**
     * @return the listado_estado
     */
    public List<EstadoCita> getListado_estado() {
        return listado_estado;
    }

    /**
     * @param listado_estado the listado_estado to set
     */
    public void setListado_estado(List<EstadoCita> listado_estado) {
        this.listado_estado = listado_estado;
    }

    /**
     * @return the sonar
     */
    public boolean isSonar() {
        return sonar;
    }

    /**
     * @param sonar the sonar to set
     */
    public void setSonar(boolean sonar) {
        this.sonar = sonar;
    }
}
